package com.mutual.assistance.media.service;

import com.mutual.assistance.media.model.dto.MediaFilesDTO;
import com.mutual.assistance.media.model.dto.UploadFileResultDto;
import com.mutual.assistance.media.model.po.MediaFilesPO;
import com.mutual.assistance.media.model.vo.DownloadFileParamsVO;
import com.mutual.assistance.media.model.vo.QueryMediaParamsVO;
import com.mutual.assistance.media.model.vo.UploadFileParamsVO;
import com.mutual.assistance.response.PageParams;
import com.mutual.assistance.response.PageResult;

import java.io.File;

/**
 * @author chenyuxin
 * @version 1.0
 * @description 媒资文件管理业务类
 * @date 2023/4/22 21:59
 */
public interface MediaFileService {
    /**
     * 上传文件通用接口
     *
     * @param uploadFileParamsDto 上传文件信息
     * @param bytes               文件的字节数组
     * @param folder              桶下面的子目录
     * @param objectName          对象名称
     * @return dto
     */
    UploadFileResultDto uploadFile(UploadFileParamsVO uploadFileParamsDto, byte[] bytes, String folder, String objectName);



    /**
     * 将文件信息保存到数据库
     *
     * @param uploadFileParamsVO 文件信息
     * @param objectName         文件名称
     * @param fileMd5            文件的摘要
     * @param bucket             桶名称
     * @return 对应的Media表信息
     */
    MediaFilesPO addMediaFilesToDb(UploadFileParamsVO uploadFileParamsVO, String objectName, String fileMd5, String bucket);

    /**
     * @param bytes      文件字节数组
     * @param bucket     桶
     * @param objectName 对象名称
     * @description 将文件写入minIO
     */
    void addMediaFilesToMinIO(byte[] bytes, String bucket, String objectName);

    /**
     * @param downloadFileParamsVO 传入参数
     * @return java.io.File
     * @description 下载文件
     * @author chenyuxin
     * @date 2023/4/24 12:55
     */
    File downloadFileFromMinIO(DownloadFileParamsVO downloadFileParamsVO);


    /**
     * @param pageParams 分页参数
     * @param queryMediaParamsVO 请求参数
     * @return 煤资文件分页对象
     * @description 获取煤资文件信息
     * @author chenyuxin
     * @date 2023/4/24 14:38
     */
    PageResult<MediaFilesDTO> queryMediaFiles(PageParams pageParams, QueryMediaParamsVO queryMediaParamsVO);


}
